/*
 * Universidad del Valle de Guatemala
 * Autor: Joseph Christopher Luttmann von Ahn
 * Carnet: 10048
 * Algoritmos y Estructura de Datos
 */
package radio.de.carro;

/**
 *
 * @author Christopher Luttmann von Ahn #10048
 */
public class Goodbee {
    
	// -- Atributos -- //
    private double estacion;        // indica la estacion actual del radio
    private double[] memoriaam;     // indica una estacion de radio almacenada en una memoria de AM (1-12)
    private double[] memoriafm;     // indica una estacion de radio almacenada en una memoria de FM (1-12)
    private int memo;               // indica la memoria actual
    private String frecuencia;      // indica en que frecuencia (AM o FM) se encuentra el radio 
    private boolean pow;			// indica el estado de encendido o apagado del radio

	

    // -- Metodos -- //
	
    // Metodo Constructor //
    public Goodbee(){
        pow = false;
		this.estacion = 530;
		this.memoriaam = new double[12];
		for(int x = 0; x<12; x++){
		memoriaam[x] = 530 + 10 * x; 
		}
		this.memoriafm = new double[12];
		for(int y = 0; y<12; y++){
		memoriafm[y] = 87.9 + 0.2 * y;
		}
		this.memo = 0;
		this.frecuencia = "AM";
    }
	
	
	
	
    // Metodo Power //
            /**
            * enciende la radio y regresa un booleano verdadero indicando 
            * que este ha sido encendido
            * @param 
            * @return boolean
            * 
            */
    public boolean power(){
		pow = true;
		return true;
    }
	
    // Metodo Cambio //
    // cambia de estacion FM a AM y devuelve verdadero cuando se cambia
    // a FM y devuelve false cuando cambia a AM.
            /**
            * Cambia la frecuencia de AM/FM del radio
            * cambiando los valores inciales  
            * @param 
            * @return boolean
            * 
            */
    public boolean cambio(){
        if(pow == true && frecuencia.equalsIgnoreCase("AM")){
        	frecuencia = "FM";
			estacion = 87.9;
			return true;
        }
        else{
			frecuencia = "AM";
			estacion = 530;
			return false;
		}
    }
	
    // Metodo Fwd //
    // Adelanta la emisora
    // si se encuentra en AM cambia de 10 en 10
    // si se encuentra en FM cambia de 0.2 en 0.2
            /**
            * cambia a la siguiente estacion
            * +10 si esta en FM o +0.2 si esta en AM  
            * @param 
            * @return void
            * 
            */
    public void fw(){
        if(pow == true && frecuencia.equalsIgnoreCase("AM") ){
            if(estacion >= 1610){
                estacion = 530;
            }
            else {
				estacion += 10;
            }
        }
		if(pow == true && frecuencia.equalsIgnoreCase("FM")){
            if(estacion >= 107.9){
                estacion = 87.9;
            }
            else{ 
				estacion += 0.2;
				estacion = (double)Math.round(estacion*10)/10;
            }
		}
    }
	
    // Metodo bw //
    // Retrocede la emisora
    // si se encuentra en AM cambia de 10 en 10
    // si se encuentra en FM cambia de 0.2 en 0.2
            /**
            * cambia a la estacion anterior
            * -10 si esta en FM o -0.2 si esta en AM
            * @param 
            * @return void
            * 
            */
    public void bw(){
        if(pow == true && frecuencia.equalsIgnoreCase("AM")){
            if(estacion <= 530){
                estacion = 1610;
            }
            else{
                estacion -= 10;
            }
	}
	if(pow == true && frecuencia.equalsIgnoreCase("FM")){
            if(estacion <= 87.9){
                estacion = 107.9;
            }
            else{
                estacion -= 0.2;
				estacion = (double)Math.round(estacion*10)/10;
            }
        }
    }
	
    // Metodo store //
    // toma como parametro un entero x para saber en que memoria (1-12) el usuario desea almacenar una estacion.
            /**
            * almacena una estacion en memoria seleccionada
            * @param boton
            * @return void
            * 
            */
    public void store(int boton){
        if(pow == true && frecuencia.equalsIgnoreCase("AM")){
            memoriaam[boton] = estacion;
            memo = boton;
		}
		if(pow == true && frecuencia.equalsIgnoreCase("FM")){
            memoriafm[boton] = estacion;
            memo = boton;
        }
    }
            
    // Metodo select //
    // toma como parametro un entero para seleccionar estacion
            /**
            * selecciona alguna memoria deseada por el usuario
            * @param boton
            * @return void
            * 
            */
    public void select(int botons){
        if(pow == true) {
            if (frecuencia.equalsIgnoreCase("AM")){
                estacion = memoriaam[botons];
		memo = botons;
            }
            else{
                estacion = memoriafm[botons];
                memo = botons;
            }
		}
    }
            /**
            * sale del programa
            * @param 
            * @return void
            * 
            */
    public void salir(){
    }

	
    // Metodo ToString //
            /**
            * Muestra el estado actual del radio.
            * @param 
            * @return void
            * 
            */
    public String toString(){
		int num = memo + 1;
		String descripcion = "";
		descripcion += "estacion: " + estacion + " \n";
		descripcion += "memoria: " + num + " \n";
		descripcion += "frecuencia: " + frecuencia + " \n";
		return descripcion;
    }
}
